/*******************************************************************************
 * @file Copyright 2009 The CREATE Lab at CMU
 * 
 *       This file is part of JubJub, an open source project.
 *       http://code.google.com/p/jubjub/
 * 
 *       Redistribution and use in source and binary forms, with or without
 *       modification, are permitted provided that the following conditions are
 *       met:
 * 
 *       Redistributions of source code must retain the above copyright notice,
 *       this list of conditions and the following disclaimer.
 * 
 *       Redistributions in binary form must reproduce the above copyright
 *       notice, this list of conditions and the following disclaimer in the
 *       documentation and/or other materials provided with the distribution.
 * 
 *       Neither the name of Carnegie Mellon nor the names of its contributors
 *       may be used to endorse or promote products derived from this software
 *       without specific prior written permission.
 * 
 *       THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 *       "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 *       LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
 *       PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 *       HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 *       SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 *       LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 *       DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 *       THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 *       (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 *       OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *******************************************************************************/

package edu.cmu.ri.createlab.jj.ui;

import java.awt.Graphics;
import java.util.Iterator;
import java.util.LinkedList;

import javax.swing.JLabel;

import edu.cmu.ri.createlab.jj.blocks.RefBlock;
import edu.cmu.ri.createlab.jj.shapes.RefShape;
import edu.cmu.ri.createlab.jj.visitors.BVDrawer;
import edu.cmu.ri.createlab.jj.visitors.BlockVisitorInterface;

public class JJDragLabel extends JLabel implements JJPanelInterface
{
   LinkedList<RefBlock> dragBlocks;
   LinkedList<RefShape> dragShapes;
   double scale;
   BVDrawer drawer;
   
   public JJDragLabel(double scale, BVDrawer drawer)
   {
      this.scale = scale;
      this.dragBlocks = null;
      this.drawer = drawer;
   }
   
   public void setBlocks(LinkedList<RefBlock> blocks)
   {
      this.dragBlocks = blocks;
      generateDragShapes();
   }
   
   protected void generateDragShapes()
   {
      if(dragBlocks != null)
      {
         dragShapes = new LinkedList<RefShape>();
         int tempX = 0;
         int tempY = 0;
         int maxX = 0;
         int maxY = 0;
         Iterator<RefBlock> it = dragBlocks.iterator();
         while(it.hasNext())
         {
            RefBlock tempBlock = it.next();
            RefShape newShape = new RefShape(tempX, tempY, tempBlock, scale, this);
            int[] bounds = newShape.getBounds();
            if(bounds[2] > maxX) 
               maxX = bounds[2];
            tempY = newShape.getBot();
            maxY = newShape.getBounds()[3];
            dragShapes.add(newShape);
         }
         this.setBounds(1000, 0, maxX, maxY);
      }
      else
      {
         dragShapes = null;
         this.removeAll();
      }
   }
   
   public void paintComponent(Graphics g)
   {
      if(dragShapes != null)
      {
         Iterator<RefShape> it = dragShapes.iterator();
         while(it.hasNext())
            it.next().draw(g, this, drawer);
      }
   }

   
   public LinkedList<RefBlock> getDragBlocks()
   {
      // TODO Auto-generated method stub
      return null;
   }

   
   public BlockVisitorInterface[] getVisitors()
   {
      // TODO Auto-generated method stub
      return null;
   }
}
